package main

import "fmt"

//定义结构体类型person
type person struct {
	name string
	age  int
}

func main() {
	//使用结构体
	//方法1
	var p person //创建person型结构体变量p
	p.name = "张三"
	p.age = 18 //为结构体变量赋值
	fmt.Println(p)

	//方法2
	p2 := person{"李四", 19} //按照成员定义顺序初始化
	fmt.Println(p2)

	//方法3
	p3 := person{name: "王五", age: 20} //通过字典格式初始化，可不按顺序
	fmt.Println(p3)

	//结构体指针
	pp := new(person) //pp的类型为 *person，指向地址为空
	fmt.Println(pp, *pp)

	p4 := p //直接赋值，p4获取的是p的copy
	p4.age = 21
	fmt.Println(p4, p) //修改p4，p被修改

	var pp2 *person = &p //pp2为*person，指向p的地址
	fmt.Println(pp2)
	pp2.age = 23
	fmt.Println(*pp2, p)
}
